/*
 * fileio.c
 *
 *  Created on: Mar 7, 2010
 *      Author: Marco Luisi
 */
#include "util.h"
#include "fileio.h"


int loadFile(char *filename){ //versione SC
	int fd;
	int dim;

	char *buffer;
	stat statbuf;

	EC_M1( fd = open(filename, O_RDONLY) );
	EC_M1( stat(filename, &statbuf) );
	if (!S_ISREG(statbuf.st_mode)) {//ok?
			printf("not reg:\n");
			return -1;
		}
	dim = (int)statbuf.st_size;
	buffer = malloc(dim * sizeof(char));// ok dim?
	EC_M1(read(fd, buffer,dim));
	EC_M1(close(fd));//che fare in caso di errore in chiusura?

	//ciclo parsing del file


}

int loadMat(char *buffer){ //controllo nome mat già presente..

	int i , j;

	matrix_t mat;
	/**Controlli preliminare della correttezza del parametro
	 * nomemat.
	 *Controllo lunghezza stringa
	 *Controllo correttezza caratteri
	 * rivedere..
	 */
	i = strcspn(s, "/");//cambiare var?
	if( i>NAMELEN || i = 0) {
		//che mettere qui?
		return -1;
	}

	if( !(isalpha(s[0])) ){
		printf("s[0]=%c\n",s[0]);
		return -1; //msg errore
	}
	for (j = 1; j<i; j++) {
		printf("s[%d]=%c\n",j,s[j]);
		if(!(isalnum(s[j])))
			return -1;
	}

	mat.name = strtok_r(s, "/",&s);
	mat.rows = (int)strtol(strtok_r(s,"/",&s), NULL, 10);//sfruttarla meglio?
	mat.columns = (int)strtol(strtok_r(s,"/",&s), NULL, 10);//sfruttarla meglio?

	//taglio newline
	s = strtok(s,"\n");
	if( strcmp(s, "#", 1) != 0){ //provare direttamente con strtok?
		//log errore
		return -1;
	}

	//taglio di #
	s = strtok(s, "#");

	//allocazione matrice
	mat = calloc(rows, sizeof(double *));
	for (i = 0; i < rows; i++){
		mat[i] = calloc(columns,sizeof(double));
	}

	//parsing linee e riempimento matrice in memoria
	for(i = 0; i < rows; i++) {
		parseLine(buffer,mat[i],mat.columns);
	}




}


int parseRow(char *buffer, double *row,int len) {
	int i;
	int check;
	char *number;
	//var statica per il controllo del ; ??
	for(i = 0; i<len; i++){//scorre riga
		aux = strtok_r(buffer, " ",&buffer);//controllo errore formato?
		//check = todouble(number, &row[i]);
		switch (check){
		//mettere delle free prima dei return?
		case -1:{ //file non conforme o errore
			return -1;
		}
		case 0:{
			if(i = len-1) {
				return -1;
			}
			break;
			}
		case 1:{
			if (i != len-1){
				return -1;
			}
			break;
			}
		} //fine switch

	} //fine scorrimento riga
		return 0;

}



int toDouble(char *num, double *d) {
	char* c;
	double tmp;
	printf("DEBUG:parse di %s\n",num);
	tmp = strtod(num, &c);
	*d = tmp;
	printf("convertito in %f, endpntr =|%s|\n",*d,c);
	if( strcmp(c, ";") == 0 ){
		return 1;
	}

	if(strcmp(c,"\0") != 0){ //se c'è un carattere, o più dopo il numero
		return -1; //errore
	}
	return 0;

}















